﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLO;
using DTO;

namespace QuanLyBanHang
{
    public partial class frmHoaDonNhap : Form
    {
        private readonly HoaDonNhap_Blo _hoaDonNhapBlo = new HoaDonNhap_Blo();
        private string _valueField;
        private string _field;
        public frmHoaDonNhap()
        {
            InitializeComponent();
        }

        private void frmHoaDonNhap_Load(object sender, EventArgs e)
        {
            LoadData();
            Utility.ComboboxUlt.LoadData(new NhanVien_Blo().GetAllObject(), cbbNhanVien, 
                new[] { "TenNV", "MaNV" }, "Chọn nhân viên");
            Utility.ComboboxUlt.LoadData(new SanPham_Blo().GetAllObject(), cbbSanPham,
                new[] { "TenSP", "MaSP" }, "Chọn sản phẩm");
            Utility.ComboboxUlt.LoadData(new NhaCungCap_Blo().GetAllObject(), cbbNCC,
                new[] { "TenNCC", "MaNCC" }, "Chọn nhà cung cấp");
        }
       
        private void LoadData()
        {
            dgvHoaDonNhap.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
            dgvHoaDonNhap.DataSource = _hoaDonNhapBlo.GetAllObject().Tables[0]; 
            dgvHoaDonNhap.Columns["MaHDN"].HeaderText = "Mã hóa đơn nhập";
            dgvHoaDonNhap.Columns["MaSP"].HeaderText = "Mã sản phẩm";
            dgvHoaDonNhap.Columns["SoLuong"].HeaderText = "Số lượng";
            dgvHoaDonNhap.Columns["GiaNhap"].HeaderText = "Giá nhập";
            dgvHoaDonNhap.Columns["ThanhTien"].HeaderText = "Thành tiền";
            dgvHoaDonNhap.Columns["KhuyenMai"].HeaderText = "Khuyến mại (%)";
            dgvHoaDonNhap.Columns["NgayNhap"].HeaderText = "Ngày nhập";
            dgvHoaDonNhap.Columns["MaNV"].HeaderText = "Mã nhân viên";
            dgvHoaDonNhap.Columns["MaNCC"].HeaderText = "Mã nhà cung cấp";
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            SetEnableInput(true);
            ResetValue();
            btnThem.Enabled = false;
            btnXoa.Enabled = false;
            btnSua.Enabled = false;
            btnBoQua.Enabled = true;
            btnLuu.Enabled = true;
        }

        private void btnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(cbbNhanVien.SelectedValue.ToString()) || string.IsNullOrEmpty(cbbNCC.SelectedValue.ToString()) || string.IsNullOrEmpty(cbbSanPham.SelectedValue.ToString()))
            {
                MessageBox.Show("Bạn phải chọn các loại mã!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (string.IsNullOrEmpty(txtSoLuong.Text) || string.IsNullOrEmpty(txtKhuyenMai.Text) || string.IsNullOrEmpty(txtDonGia.Text))
            {
                MessageBox.Show("Bạn phải nhập đầy đủ thông tin!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            string mahd = txtMaHDN.Text;
            string ngaynhap = dateTimePicker1.Value.Date.ToString();
            string manv = cbbNhanVien.SelectedValue.ToString();
            string mancc = cbbNCC.SelectedValue.ToString();
            string masp = cbbSanPham.SelectedValue.ToString();
            int soluong = int.Parse(txtSoLuong.Text);
            int km = int.Parse(txtKhuyenMai.Text);
            decimal dongia = decimal.Parse(txtDonGia.Text);
            int result;
            string msg;
            if (string.IsNullOrEmpty(mahd))
            {
               result =  _hoaDonNhapBlo.AddObject("HDN" + _hoaDonNhapBlo.AutoIncrementIdObject(), ngaynhap, manv, mancc, masp, soluong, km, dongia);
                msg = result > 0?"Thêm hóa đơn thành công!": "Thêm hóa đơn không thành công!";
            }
            else
            {
               result = _hoaDonNhapBlo.EditObject(mahd, ngaynhap, manv, mancc, masp, soluong, km, dongia); 
                msg = result > 0?"Sửa hóa đơn thành công!": "Sửa hóa đơn không thành công!";
            }
            MessageBox.Show(msg, "Thông báo", MessageBoxButtons.OK, result > 0 ? MessageBoxIcon.Information : MessageBoxIcon.Error);
            if (result > 0)
            {
                btnLuu.Enabled = false;
                btnBoQua.Enabled = false;
                btnThem.Enabled = true;
                LoadData();
            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            btnThem.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnBoQua.Enabled = true;
            btnSua.Enabled = false;
            SetEnableInput(true);
        }

        private void SetEnableInput(bool b)
        {
            txtSoLuong.Enabled = b;
            dateTimePicker1.Enabled = b;
            cbbNCC.Enabled = b;
            cbbNhanVien.Enabled = b;
            cbbSanPham.Enabled = b;
            txtKhuyenMai.Enabled = b;
            txtDonGia.Enabled = b;
        }

        private void ResetValue()
        {
            txtMaHDN.Text = "";
            dateTimePicker1.Value = System.DateTime.Now.Date;
            txtSoLuong.Text = "";
            txtThanhTien.Text = "";
            txtDonGia.Text = "";
            txtKhuyenMai.Text = "";
            cbbNCC.SelectedIndex = 0;
            cbbNhanVien.SelectedIndex = 0;
            cbbSanPham.SelectedIndex = 0;
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("Bạn thực sự muốn xóa hóa đơn này?", "Thông báo"
                ,MessageBoxButtons.YesNo , MessageBoxIcon.Warning);

            if (dr == DialogResult.No) return;

            int result = _hoaDonNhapBlo.DeleteObject(txtMaHDN.Text.Trim());
            string msg = result > 0 ? "Xóa hóa đơn thành công" : "Xóa hóa đơn không thành công!";
            if (result > 0)
                LoadData();
        }

        private void dgvHoaDonNhap_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvHoaDonNhap.Rows[e.RowIndex].Cells[0].Value == null || dateTimePicker1.Enabled) return;
            txtMaHDN.Text = dgvHoaDonNhap.Rows[e.RowIndex].Cells["MaHDN"].Value.ToString();
            dateTimePicker1.Value = DateTime.Parse(dgvHoaDonNhap.Rows[e.RowIndex].Cells["NgayNhap"].Value.ToString());
            cbbNhanVien.SelectedValue = dgvHoaDonNhap.Rows[e.RowIndex].Cells["MaNV"].Value.ToString();
            cbbNCC.SelectedValue = dgvHoaDonNhap.Rows[e.RowIndex].Cells["MaNCC"].Value.ToString();
            cbbSanPham.SelectedValue = dgvHoaDonNhap.Rows[e.RowIndex].Cells["MaSP"].Value.ToString();
            txtSoLuong.Text = dgvHoaDonNhap.Rows[e.RowIndex].Cells["SoLuong"].Value.ToString();
            txtThanhTien.Text = dgvHoaDonNhap.Rows[e.RowIndex].Cells["ThanhTien"].Value.ToString();
            txtKhuyenMai.Text = dgvHoaDonNhap.Rows[e.RowIndex].Cells["KhuyenMai"].Value.ToString();
           // txtDonGia.Text = dgvHoaDonNhap.Rows[e.RowIndex].Cells["GiaNhap"].Value.ToString();
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
        }



        private void btnBoQua_Click(object sender, EventArgs e)
        {
            SetEnableInput(false);
            btnThem.Enabled = true;
            btnBoQua.Enabled = false;
            btnLuu.Enabled = false;
        }

        private void txtKhuyenMai_TextChanged(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtSoLuong.Text) || string.IsNullOrEmpty(txtDonGia.Text))
                return;

            int soluong = int.Parse(txtSoLuong.Text.Trim());
            decimal giaban = decimal.Parse(txtDonGia.Text.Trim());
            decimal thanhtien = 0;

            if (string.IsNullOrEmpty(txtKhuyenMai.Text.Trim()) || txtKhuyenMai.Text.Equals("0"))
            {
                thanhtien = soluong * giaban;
            }
            else
            {
                int khuyenmai = int.Parse(txtKhuyenMai.Text.Trim());
                thanhtien = soluong * giaban * khuyenmai / 100;
            }

            txtThanhTien.Text = thanhtien.ToString();
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            _valueField = dateTimePicker2.Enabled == false? cbbTmp.SelectedValue.ToString() : dateTimePicker2.Value.Date.ToString();
            _field += string.Format("='{0}'", _valueField);

            dgvHoaDonNhap.DataSource = _hoaDonNhapBlo.FindObject(_field);
            btnTimKiem.Enabled = false;
            cbbTmp.Enabled = false;
            cbbTmp.DataSource = null;
            cbbTieuChi.SelectedIndex = 0;
        }

        private void cbbTieuChi_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cbbTieuChi.SelectedItem.ToString())
            {
                case "Mã hàng":
                    btnTimKiem.Enabled = false;
                    cbbTmp.Enabled = true;
                   dateTimePicker2.Enabled = false;
                    var sanPhamBlo = new SanPham_Blo();
                    Utility.ComboboxUlt.LoadData(sanPhamBlo.GetAllObject(), cbbTmp,
                          new[] { "TenSP", "MaSP" }, "Chọn sản phẩm");

                    _field = "MaSP";
                    break;

                case "Nhà cung cấp":
                    cbbTmp.Enabled = true;
                    dateTimePicker2.Enabled = false;
                    var nccBlo = new NhaCungCap_Blo();
                    Utility.ComboboxUlt.LoadData(nccBlo.GetAllObject(), cbbTmp,
                        new[] { "TenNCC", "MaNCC" }, "Chọn nhà cung cấp");
                    _field = "MaNCC";
                    break;

                case "Ngày nhập":
                    dateTimePicker2.Enabled = true;
                    btnTimKiem.Enabled = true;
                    cbbTmp.DataSource = null;
                    cbbTmp.Enabled = false;
                    _field = "NgayNhap";
                    break;
                default:
                    btnTimKiem.Enabled = false;
                    dateTimePicker2.Enabled = false;
                    break;
            }
        }

        private void cbbTmp_SelectedIndexChanged(object sender, EventArgs e)
        {
                btnTimKiem.Enabled = true;
        }
    }
}
